package cn.juque.jdfsystem.handler.metaobject;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ReflectUtil;
import cn.juque.lucenecandy.bo.FieldBO;
import cn.juque.lucenecandy.core.enums.DataTypeEnum;
import cn.juque.lucenecandy.core.enums.FieldFillEnum;
import cn.juque.lucenecandy.core.handlers.metaobject.IMetaObject;

import java.util.Objects;
import java.util.Set;

/**
 * @author juque
 * @version 1.0.0
 * <ul>
 *     <li>UpdateOrgMetaObject</li>
 * </ul>
 * @date 2024-01-11
 **/
public class UpdateOrgIdMetaObject implements IMetaObject {

    private static final String UPDATE_ORG_ID = "updateOrgId";

    @Override
    public void invoke(FieldFillEnum fillEnum, Object entity, String fieldName, FieldBO fieldBO) {
        if (Objects.isNull(entity)
                || !DataTypeEnum.STRING.getCode().equals(fieldBO.getDataType().getCode())
                || !UPDATE_ORG_ID.equals(fieldName)) {
            return;
        }
        Set<FieldFillEnum> fillEnums = fieldBO.getFills();
        if (!CollUtil.contains(fillEnums, fillEnum)) {
            return;
        }
        Object value = ReflectUtil.getFieldValue(entity, fieldName);
        if (FieldFillEnum.INSERT.equals(fillEnum) && Objects.isNull(value)) {
            ReflectUtil.setFieldValue(entity, fieldName, "root");
        }
        if (FieldFillEnum.UPDATE.equals(fillEnum)) {
            ReflectUtil.setFieldValue(entity, fieldName, "root");
        }
    }
}
